package com.oop.meijv;
/*
使用关键字enum时，会隐式继承Enum类，使用我们可以使用Enum类里的方法
  1.toString:Enum类已经重写过了，返回的是当前对象名子类可以重写该方法，用于返回对象的属性信息
  2.name:返回当前对象名(常量名)，子类中不能重写
  3.ordinal:返回当前对象的位置号，默认从0开始
  4.values:返回当前枚举类中所有的常量
  5.valueOf:将字符串转换成枚举对象，要求宇符串必须为已有的常量名，否则报异常!
  6.compareTo:比较两个枚举常量，比较的就是位置号!
 */
//对Season类进行测试，在meijv2里
public class Enum_fangfa {
    public static void main(String[] args) {
        Season2 autumn = Season2.AUTUMN;


        //输出枚举对象的名字
        System.out.println(autumn.name());


        //ordinal输出的是该枚举对象的次序/编号，从0开始编号
        //枚举对象是第三个,所以输出2
        System.out.println(autumn.ordinal());


        //values方法是隐藏起来的，所以在源代码看不到。从反编译可以看出 values方法，返回Season2[]
        //含有定义的所有枚举对象
        Season2[] values = Season2.values();
        for (Season2 season:values) {
            System.out.println(season);
        }


        //valueOf:将字符串转换成枚举对象，要求字符串必须VT为已有的常量名，否则报异常//执行流程
        //1.根据你输入的"AUTUMN" 到 Season2的枚举对象去查找
        //2.如果找到了，就返回，如果没有找到，就报错
        Season2 autumn1 = Season2.valueOf("AUTUMN");
        System.out.println("autumn1="+ autumn1);
        System.out.println(autumn == autumn1);


        //compareTo:比较两个枚举常量，比较的就是编号!即ordinal()这个号
        //1.就是把Season2.AUTUMN 枚举对象的编号 和 Season2.SUMMER枚举对象的编号比较
        /*源码：
        public final int compareTo(E o){
            return self.ordinal - other.ordinal;
        }
        也就是说把Season2.AUTUMN的编号 - Season2.SUMMER的编号
        */
        System.out.println(Season2.AUTUMN.compareTo(Season2.SUMMER));
    }
}
